Feat/adminpolicy#125
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✅ Files skipped from review due to trivial changes (1)
📝 WalkthroughWalkthroughA new Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant VetController
participant AdminPolicy
participant VetService
participant Database
Client->>VetController: POST /vets (createVet request)
Note over VetController: Authentication principal extracted as User
VetController->>AdminPolicy: requireAdmin(user)
alt user has Role.ADMIN
AdminPolicy-->>VetController: OK
VetController->>VetService: createVet(request)
VetService->>Database: persist vet
Database-->>VetService: persisted
VetService-->>VetController: VetResponse
VetController-->>Client: 201 Created (VetResponse)
else not admin
AdminPolicy-->>VetController: throws ForbiddenException
VetController-->>Client: 403 Forbidden
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
| @Component | ||
| public class AdminPolicy { | ||
| public void requireAdmin(User user){ | ||
| if (user.getRole() != Role.ADMIN) { |
There was a problem hiding this comment.
För att undvika crash i det fallet där user == null, ändra till if (user == null || user.getRole() != Role.ADMIN)
There was a problem hiding this comment.
Bra input! Ändrar det!
feat: implement AdminPolicy for role-based access control
Closes #73
Vad har gjorts:
Skapar AdminPolicy som en central komponent för admin-behörighet i hela Vet1177-plattformen.
la till requireAdmin(User user) som kastar ForbiddenException (403) om användaren inte har rollen ADMIN.
Uppdaterar VetController så att createVet anropar adminPolicy.requireAdmin(user) som första rad, via @AuthenticationPrincipal.
Avvikelse från issue-beskrivningen
Issuen föreslog att använda SecurityContextHolder och ha metoden utan parameter, altså requireAdmin(). Jag valde istället att ta emot User som parameter, requireAdmin(User user), Det håller AdminPolicy konsekvent med hur alla andra policies i projektet är byggda och det gör klassen lättare att testa
Användaren hämtas via @AuthenticationPrincipal i controllern istället, vilket ska vara Spring Securitys rekommenderade sätt
Summary by CodeRabbit